vim.g.mapleader = " "
vim.g.maplocalleader = " "
local map = vim.keymap
local opt = { noremap = true, silent = true }
local opts = { noremap = true, silent = false }

-- 基础键位
map.set("i", "jj", "<C-[>", opt)
map.set("n", "<Tab>", ":", opts)
map.set("n", "\\", "/", opts)
-- map.set("c", "<leader><leader>", "<C-[>", opt)

-- map.set("i", "jk", "<C-[>", opt)
--map.set("n", "<leader>", ":", opt)
map.set("n", "<BS>", ":set hlsearch!<CR>", opt)
map.set("i", "\\\\", "<C-[>/<++><CR>:nohlsearch<CR>c4l", opt)
map.set("n", "<leader>0", ":set wrap!<CR>", opt)
map.set("v", "p", "P", opt)

map.set("n", "W", "5w", opt)
map.set("n", "B", "5b", opt)

-- 普通模式,可视模式和等待操作模式下,行的首尾 & 页面的首尾跳转
map.set({ "n", "o", "v" }, "L", "$", opt)
map.set({ "n", "o", "v" }, "H", "0", opt)
map.set({ "n", "o", "v" }, "J", "G", opt)
map.set({ "n", "o", "v" }, "K", "gg", opt)

map.set({ "v", "x" }, "<C-j>", ":m '>+1<CR>gv=gv", opt)
map.set({ "v", "x" }, "<C-k>", ":m '<-2<CR>gv=gv", opt)
map.set({ "v", "x" }, "<leader><leader>", "<C-[>", opt)

map.set("v", "<", "<gv^", opt)
map.set("v", "<", "<gv^", opt)

map.set("n", "Y", "yiw", opt)
map.set("n", "D", "diw", opt)
map.set("n", "C", "ciw", opt)

map.set({ "i", "n", "v" }, "<Left>", "<Nop>", opt)
map.set({ "i", "n", "v" }, "<Right>", "<Nop>", opt)
map.set({ "i", "n", "v" }, "<Up>", "<Nop>", opt)
map.set({ "i", "n", "v" }, "<Down>", "<Nop>", opt)
-- map.set("i", "<Esc>", "<Nop>", opt)

map.set("i", "<c-h>", "<left>", opt)
map.set("i", "<c-j>", "<down>", opt)
map.set("i", "<c-k>", "<up>", opt)
map.set("i", "<c-l>", "<right>", opt)

map.set("n", "j", "gj", opt)
map.set("n", "k", "gk", opt)

-- 窗口间的跳转
map.set("n", "<C-h>", "<C-w>h", opt)
map.set("n", "<C-j>", "<C-w>j", opt)
map.set("n", "<C-k>", "<C-w>k", opt)
map.set("n", "<C-l>", "<C-w>l", opt)

-- 窗口大小调整
map.set("n", "<C-left>", ":vertical resize -2<CR>", opt)
map.set("n", "<C-right>", ":vertical resize +2<CR>", opt)
map.set("n", "<C-down>", ":resize +2<CR>", opt)
map.set("n", "<C-up>", ":resize -2<CR>", opt)

map.set("i", "<C-j>", "<C-[>o", opt)
map.set("i", "<C-k>", "<C-[>O", opt)

map.set("n", "U", "<C-r>", opt)

map.set("n", "<leader>l", ":BufferLineCycleNext<CR>", { noremap = true, silent = true })
map.set("n", "<leader>h", ":BufferLineCyclePrev<CR>", { noremap = true, silent = true })

vim.api.nvim_create_autocmd("InsertEnter", {
    callback = function()
        vim.api.nvim_buf_set_keymap(0, "i", "<leader><leader><CR>", "<C-[>O", { silent = true, noremap = true })
        vim.api.nvim_buf_set_keymap(0, "i", "<leader><CR>", "<C-[>o", { silent = true, noremap = true })
    end,
})


-- markdown 相关映射
vim.api.nvim_create_autocmd("FileType", {
	pattern = "markdown",
	callback = function()
		-- 分割线
		vim.api.nvim_buf_set_keymap(0, "i", "---", "<Enter>---<Enter><br/><Enter>", { silent = true, noremap = true })
		-- 加粗
		vim.api.nvim_buf_set_keymap(0, "i", "BB", "**** <++><Esc>F*hi", { silent = true, noremap = true })
		-- 加粗并斜体
		vim.api.nvim_buf_set_keymap(0, "i", "DD", "****** <++><Esc>F*hhi", { silent = true, noremap = true })
		-- 斜体
		vim.api.nvim_buf_set_keymap(0, "i", "II", "** <++><Esc>F*i", { silent = true, noremap = true })
		-- 删除线
		vim.api.nvim_buf_set_keymap(0, "i", "SS", "~~~~ <++><esc>F~hi", { silent = true, noremap = true })
		-- 下划线
		vim.api.nvim_buf_set_keymap(0, "i", "UU", "<u></u> <++><Esc>2F<i", { silent = true, noremap = true })
		-- 展开列表
		vim.api.nvim_buf_set_keymap(
			0,
			"i",
			"LS",
			"<details><Enter><summary></summary><Enter><++><Enter></details><Esc>2k$F<i",
			{ silent = true, noremap = true }
		)
		-- 格式块
		vim.api.nvim_buf_set_keymap(
			0,
			"i",
			"~~",
			"~~~<Enter><Enter>~~~<Enter><++><Esc>2kA",
			{ silent = true, noremap = true }
		)
		-- 添加图片
		vim.api.nvim_buf_set_keymap(0, "i", "<leader>p", "![](<++>) <++><Esc>F[a", { silent = true, noremap = true })
		-- 添加链接
		vim.api.nvim_buf_set_keymap(0, "i", "<leader>a", "[](<++>) <++><Esc>F[a", { silent = true, noremap = true })

		-- 2-4级标题
		vim.api.nvim_buf_set_keymap(0, "i", "@@", "##<Space>", { silent = true, noremap = true })
		vim.api.nvim_buf_set_keymap(0, "i", "##", "###<Space>", { silent = true, noremap = true })
		vim.api.nvim_buf_set_keymap(0, "i", "$$", "####<Space>", { silent = true, noremap = true })
	end,
})
